初识Mach-O文件

逆向APP的思路

  • 界面分析
    Cycript、Reveal

  • 代码分析
    对Mach-O文件的静态分析
    MachOView、class-dump、Hopper Disassembler、ida等

  • 动态调试
    对运行中的APP进行代码调试
    debugserver、LLDB

  • 代码编写
    注入代码到APP中
    必要时还可能需要重新签名、打包ipa

    class-dump

  • 顾名思义,它的作用就是把Mach-O文件的class信息给dump出来(把类信息给导出来),生成对应的.h头文件

  • 官方地址

  • 下载完工具包后将class-dump文件复制到Mac的/usr/local/bin目录,这样在终端就能识别class-dump命令了

  • 常用格式
    class-dump -H Mach-O文件路径 -o 头文件存放目录
    -H表示要生成头文件
    -o用于制定头文件的存放目录

常见的Mach-O文件类型

  • MH_OBJECT
    目标文件(.o)
    静态库文件(.a),静态库其实就是N个.o合并在一起

  • MH_EXECUTE:可执行文件
    .app/xx

  • MH_DYLIB:动态库文件
    .dylib
    .framework/xx

  • MH_DYLINKER:动态链接编辑器
    /usr/lib/dyld

  • MH_DSYM:存储着二进制文件符号信息的文件
    .dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩溃信息)

    Mach-O的基本结构

  • 官方描述

  • 一个Mach-O文件包含3个主要区域
    Header
    文件类型、目标架构类型等

  • Load commands
    描述文件在虚拟内存中的逻辑结构、布局

  • Raw segment data
    在Load commands中定义的Segment的原始数据

    窥探Mach-O的结构

  • 命令行工具
    file:查看Mach-O的文件类型
    file 文件路径

  • otool:查看Mach-O特定部分和段的内容

  • lipo:常用于多架构Mach-O文件的处理
    查看架构信息:lipo -info 文件路径
    导出某种特定架构:lipo 文件路径 -thin 架构类型 -output 输出文件路径
    合并多种架构:lipo 文件路径1 文件路径2 -output 输出文件路径

  • GUI工具
    MachOView

Share